// noncopyable.hpp.cu header file

// Copyright (c) 2010 - 2011 Kohei Takahashi (Flast).
// Distributed under the MIT license. for more detail see COPYING.

// Redefinition boost::noncopyable

#ifndef IG_PHALANX_UTILITY_NONCOPYABLE_HPP_CU_ONCE_
#define IG_PHALANX_UTILITY_NONCOPYABLE_HPP_CU_ONCE_

#include <phalanx/config.hpp.cu>

namespace phalanx
{

namespace noncopy_detail
{

struct non_copy_ctible
{
protected:
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    non_copy_ctible( void ) {}
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    ~non_copy_ctible( void ) {}

private:
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    non_copy_ctible( const non_copy_ctible & );
};

} // namespace noncopy_detail

using ::phalanx::noncopy_detail::non_copy_ctible;


namespace noncopy_detail
{

struct non_copy_assignable
{
protected:
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    non_copy_assignable( void ) {}
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    ~non_copy_assignable( void ) {}

private:
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    non_copy_assignable &
    operator=( const non_copy_assignable & );
};

} // namespace noncopy_detail

using ::phalanx::noncopy_detail::non_copy_assignable;


namespace noncopy_detail
{

struct non_copyable
{
protected:
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    non_copyable( void ) {}
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    ~non_copyable( void ) {}

private:
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    non_copyable( const non_copyable & );
    PHALANX_CONFIG_DEFAULT_FUNCTION( true )
    non_copyable &
    operator=( const non_copyable & );
};

} // namespace noncopy_detail

using ::phalanx::noncopy_detail::non_copyable;

} // namespace phalanx

#endif // IG_PHALANX_UTILITY_NONCOPYABLE_HPP_CU_ONCE_

